From: Jonas Dreßler Date: Wed, 11 Sep 2019 18:24:17 +0000 (+0200) Subject: extensionSystem: Always enforce disallowing extensions using sessionMode X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~811^2^2~98 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2a9e065cfb;p=gnome-shell.git extensionSystem: Always enforce disallowing extensions using sessionMode It's currently possible to circumvent the `sessionMode.allowExtensions` property: For already enabled extensions one can call reloadExtension via DBus, for new extensions it's possible by adding the extension to the enabled-extensions gsettings key and setting the disable-extension-version-validation key (which triggers a reload of `this._enabledExtensions`) and then calling reloadExtension via DBus. So to enforce `allowExtensions` while still allowing to update extensions and keeping the extensionSystem synced with various gsettings keys, replace the checks for `this._enabled` with simple checks for `Main.sessionMode.allowExtensions` inside `_callExtensionInit()` and `_callExtensionEnable()`. The remaining checks for `this._enabled` are only small optimizations to prevent running code on irrelevant sessionMode updates. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/96 --- diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js index 99777a631..d14956810 100644 --- a/js/ui/extensionSystem.js +++ b/js/ui/extensionSystem.js @@ -98,6 +98,9 @@ var ExtensionManager = class { } _callExtensionEnable(uuid) { + if (!Main.sessionMode.allowExtensions) + return; + let extension = this.lookup(uuid); if (!extension) return; @@ -302,6 +305,9 @@ var ExtensionManager = class { } _callExtensionInit(uuid) { + if (!Main.sessionMode.allowExtensions) + return; + let extension = this.lookup(uuid); if (!extension) throw new Error("Extension was not properly created. Call createExtensionObject first"); @@ -385,9 +391,6 @@ var ExtensionManager = class { _onEnabledExtensionsChanged() { let newEnabledExtensions = this._getEnabledExtensions(); - if (!this._enabled) - return; - // Find and enable all the newly enabled extensions: UUIDs found in the // new setting, but not in the old one. newEnabledExtensions.filter( @@ -426,11 +429,9 @@ var ExtensionManager = class { this.reloadExtension(extension); this._enabledExtensions = this._getEnabledExtensions(); - if (Main.sessionMode.allowExtensions) { - this._enabledExtensions.forEach(uuid => { - this._callExtensionEnable(uuid); - }); - } + this._enabledExtensions.forEach(uuid => { + this._callExtensionEnable(uuid); + }); } _loadExtensions() {